package com.example.d2_recursion;

/**
 * 目标：猴子吃桃问题
 */
public class RecursionTest3 {
    public static void main(String[] args) throws Exception {
        // 猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃其中的一半,
        // 然后再多吃一个当到第10天时,想再吃时(即还没吃),发现只有1个桃子了问题:最初共多少个桃子?
        // f(10) = 1 第十天的桃子数量只有一个
        /*
            公式： f(x) = f(x + 1)  f(x)表示当天的桃子数量 f(x+1)表示后一天的天的桃子数量
            因为后一天的桃子数量等于 前一天桃子数量的总数一半 在减去1
            -> f(x) - f(x) / 2 - 1 = f(x+1)
            -> 2f(x) - f(x) - 2 = 2f(x+1)
            -> f(x) = 2f(x+1) + 2  ->这个就是公式
            求 f(1)
         */
        System.out.println(f(1));
    }

    /**
     * 递归函数,用于计算特定数学序列的值
     * 该函数以一个整数作为输入,如果输入为10,则返回1,否则返回一个基于后续整数计算的值
     * 主要用于演示递归计算的过程和方法
     *
     * @param x 输入的整数,用于计算序列的起始点
     * @return 根据输入x计算得到的序列值
     */
    public static int f(int x) {
        // 当输入为10时,递归终止,返回1
        if (x == 10) {
            return 1;
        } else {
            // 递归调用,计算f(x + 1)的值,并根据定义的公式返回结果
            // 这里体现了函数的递归特性,即函数调用自身来计算结果
            return 2 * f(x + 1) + 2;
        }
    }
}









